import { defineConfig, loadEnv } from 'vite'
import uni from '@dcloudio/vite-plugin-uni'
// https://vitejs.dev/config/
// 说明：
// 1) 本配置尽量不引入额外插件，以避免新增依赖。
// 2) 仅对 H5 构建生效的优化（如 manualChunks、文件命名等）不会影响小程序端。
export default defineConfig(({ mode }) => {
  // 读取 .env 文件（只暴露以 VITE_ 开头的变量到客户端）
  const env = loadEnv(mode, process.cwd())
  const isProd = mode === 'production'
  console.log('mode', mode)
  return {
    // 插件
    plugins: [
      uni(),
    ],

    // 常用别名，方便引入
    resolve: {
      alias: {
        '@': '/src', // 对应 `社区惠购/src/`
      },
    },

    // 通过 esbuild 在生产环境移除调试语句，构建更小
    esbuild: {
      drop: isProd ? ['console', 'debugger'] : [],
      // 保留中文字符，避免压缩后可能的编码问题
      legalComments: 'none',
    },

    build: {
      // 构建目标与压缩
      target: 'es2018',
      minify: 'esbuild',

      // 产物目录规则与 hash
      assetsDir: 'static',
      cssCodeSplit: true,
      sourcemap: env.VITE_SOURCEMAP === 'true',
      reportCompressedSize: false, // 关闭 gzip 体积统计，加快构建
      chunkSizeWarningLimit: 1000, // 提高告警阈值，减少无意义告警
      assetsInlineLimit: 4096, // 小于 4kb 的资源内联

      rollupOptions: {
        output: {
          // 统一文件命名，包含 content hash，便于长缓存
          entryFileNames: 'assets/js/[name]-[hash].js',
          chunkFileNames: 'assets/js/[name]-[hash].js',
          assetFileNames: ({ name }) => {
            if (!name) return 'assets/[name]-[hash][extname]'
            if (/\.(css)$/.test(name)) return 'assets/css/[name]-[hash][extname]'
            if (/\.(png|jpe?g|gif|svg|webp|ico)$/.test(name)) return 'assets/img/[name]-[hash][extname]'
            if (/\.(mp4|webm|ogg|mp3|wav|flac|aac)$/.test(name)) return 'assets/media/[name]-[hash][extname]'
            if (/\.(woff2?|eot|ttf|otf)$/.test(name)) return 'assets/fonts/[name]-[hash][extname]'
            return 'assets/[name]-[hash][extname]'
          },

          // 手动分包策略：
          // - vue 相关单独拆出，提升缓存命中
          // - uv-ui 单独拆出，避免与其他 vendor 频繁耦合
          // - 其余 node_modules 归入 vendor
          manualChunks(id) {
            if (id.includes('node_modules')) {
              if (id.includes('/vue')) return 'vendor-vue'
              if (id.includes('@climblee/uv-ui')) return 'vendor-uvui'
              return 'vendor'
            }
          },
        },
      },
    },

    // 依赖预构建优化（可按需增减）
    optimizeDeps: {
      // 不强制将 vue 作为预构建入口，交给 Vite 及 uni 插件自处理
      include: [
        '@climblee/uv-ui',
      ],
      // 显式清空 external，防止第三方插件误将关键依赖标记为 external
      esbuildOptions: {
        external: [],
      },
    },
  }
})
